// JSONP-oplossing voor ophalen hockeyuitslagen
// -----------------------------------------------------------------------------
// Immediately Invoked Anonymous Function regelt alles verder. Onderaan
// kun je als parameter van deze anonieme functie opgeven wat de naam van
// de namespace moet zijn.
// data komen van de 'standenmotor' van KNHB. Helaas alleen als HTML op
// te halen
// -----------------------------------------------------------------------------
(function(ns) {
  ns                = ns || 'NS';
  var   srcTemplate = ["http://www.nicon.nl/genericsvc/util/echoxhr.asp?",
                       "url=http://m.hockey.nl/standenmotor/$2/HH11RR4/",
                       "40664-59396/Sm9uZ2VucyBCMiA=/1/003/D",
                       "&encode=1",
                       "&jsonp=$1.createTip&ontimeout=$1.timeout"
                      ].join('')
      , w           = window;

  // laadt of herlaadt script voor src (uitslagen of standen) en elftal
  function scriptIt(wat) {
    var  scrpt   = document.createElement('script')
        ,scrptEl = document.getElementById('datascript');
    scrpt.id = 'datascript';
    scrpt.src = srcTemplate.$(ns,wat);
    if (scrptEl){
      document.body.replaceChild(scrpt,scrptEl);
    } else {
      document.body.appendChild(scrpt);
    }
  }

  // initialiseer uitslagen
  function haaldata(StandUitslagenofProgramma){
     //$H.clear();
     //$H.displayln('data ophalen (max 10 seconden) ...');
     scriptIt(StandUitslagenofProgramma);
  }

  // loop door de lijst die via response is doorgegeven
  // (response is dus een array van js-objecten)
  function showitems(response) {
      $H.clear();
      if (!response.length){
        $H.displayln('Hockey-site geeft geen data terug, sorry ...');
        return true;
      }
      for (var i=0;i<response.length;i=i+1) {
          $H.displayln('-'.repeat(40));
          var item = response[i];
          for (var l in item){
              $H.displayln (l+': '+item[l]);
          }
      }
  }

  // creëer een tabel uit de response
  function createTable(r){
      $H.clear();
      if (!r.length || r.trim() === ''){
        $H.displayln('Hockey-site geeft geen data terug, sorry ...');
        return true;
      }

      var  headerobj = r[0]
          ,tblstr    = '<table>$1</table>'
          ,rowstr    = '<tr>$1</tr>'
          ,headerstr = '<th>$1</th>'
          ,tcell     = '<td>$1</td>'
          ,header    = []
          ,table     = [];

      // maak 'n header
      for (var l in headerobj){
          header.push(headerstr.$(l));
      }
      table.push(rowstr.$(header.join('')));

      // maak de rijen
      for (var i=0;i<r.length;i=i+1){
          var currentrow = r[i],
              row = [];
          for (var l in currentrow){
              row.push(tcell.$(currentrow[l]));
          }
          table.push(rowstr.template(row.join('')));
      }

      // laat maar zien
      $H.displayln(
           tblstr.$(table.join('\n'))
          ,'&copy; KooiInc 2011'
      );
  }
  //callback jsonp req
  function createTip(r){
      var datacontainer = document.createDocumentFragment(), data, result;
      datacontainer.appendChild(document.createElement('div'));
      data = datacontainer.firstChild;
      data.innerHTML
          = decodeURIComponent(r);
      result = '<table>'+data.getElementsByTagName('table')[3].innerHTML+'</table>';

  }

  // data van hockeybond is een html-page
  // daar moet de relevante tabel uit worden geplukt ...
  // een documentFragment zorgt ervoor dat de html
  // niet echt wordt geladen
  function testMe(r){
      $H.clear();
      if (!r.length || r.trim() === ''){
        $H.displayln('Hockey-site geeft geen data terug, sorry ...');
        return true;
      }
      var datacontainer = document.createDocumentFragment(), data;
      datacontainer.appendChild(document.createElement('div'));
      data = datacontainer.firstChild;
      data.innerHTML
          = decodeURIComponent(r);
      $H.display('<table>'+
          data.getElementsByTagName('table')[3].innerHTML+'</table>'
      );
  }

  function timedout(){
        $H.clear();
        $H.display('Timeout: geen antwoord KNVB, sorry');
  }

  // creëer namespace in de global namespace (window)
  // en maak er een object met methods van
  w[ns] = {
      uitslagen: function(){haaldata('uitslagen',true)},
      stand:     function(){haaldata('stand')},
      programma: function(){haaldata('programma')},
      testMe:    testMe,
      totable:   createTable,
      timedout:  timedout
  };

  // assign handlers aan de twee knoppen
  //document.getElementById('uitslagen').onclick = w[ns].uitslagen;
  //document.getElementById('stand').onclick   = w[ns].stand;
  //document.getElementById('programma').onclick   = w[ns].programma;

  // assign handler aan window.onload event
  //w.onload = window[ns].uitslagen;

}('HOCKEY'));